package com.bora_bandeco;

import java.util.ArrayList;
import java.util.List;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import android.content.Context;
import android.content.SharedPreferences;
import android.database.Cursor;
import android.os.AsyncTask;
import android.provider.ContactsContract;

public class ContatosFetcher extends AsyncTask<Void, Void, String> {
	final static int TIMEOUT = 10;
	final static String URI = "http://www.students.ic.unicamp.br/~ra104864/bora_bandeco/recuperar_contatos.php";
	private Context mContext;
	
	public ContatosFetcher(Context c) {
		super();

		this.mContext = c;
	}

	@Override
	protected String doInBackground(Void... urls) {
		return this.buscarContatos();
	}

    @Override
	protected void onProgressUpdate(Void... result) {
        //
    }

    @Override
	protected void onPostExecute(String result) {
    	if (result != null) {
	    	this.atualizaContatos(result);
    	}
    }
	
	private String buscarContatos() {
		List<String> numerosTelefone = new ArrayList<String>();
		Cursor phones = this.mContext.getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null,null,null, null);
		
		while (phones.moveToNext()) {
			String phoneNumber = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));  
			numerosTelefone.add(phoneNumber);
		}
		phones.close();
		
		return ServerUtilities.buscarContatos(this.mContext, numerosTelefone);
	}
	
	/**
	 * Insere no banco de dados local os contatos que possuem o aplicativo instalado.
	 * 
	 * @param jsonString
	 */
	private void atualizaContatos(String jsonString) {
		
		// Recupera o idContato do usuário do aparelho para 
		// evitar que seja salvo como um contato
		SharedPreferences preferences = this.mContext.getSharedPreferences("com.bora_bandeco", Context.MODE_PRIVATE);
        int meuIdContato = preferences.getInt("_id", 0);
        
		try {
			JSONArray jsonArr = new JSONArray(jsonString);
				
			if (jsonArr != null) {
				int lenght = jsonArr.length();
				 
				for (int i = 0; i < lenght; i++) {
					JSONObject jsonObj = jsonArr.getJSONObject(i);
					int idContato = jsonObj.getInt("_id");
					String nome = jsonObj.getString("nome");
					String foto = jsonObj.getString("foto");
					
					// Evita que os dados do usuário do aparelho sejam salvos no banco de dados
					// os mesmos dados já estão disponíveis como preferências do aplicativo
					if (meuIdContato != idContato) {
						Contato contato = new Contato();
						contato.setId(idContato);
						contato.setNome(nome);
						contato.setFoto(foto);
						 
						contato.setNumeroTelefone(jsonObj.getString("numero_telefone"));
									 
						contato.salvar();
					}
				}
			}
		} catch (JSONException e) {
			// plis, o servidor vai colaborar, neh
		}
	}
}
